#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <ranges>
#include <cmath>
namespace rg = std::ranges;

int main()
{
    // 变换（Transform），别的编程语言习惯叫做映射（Map）
    std::vector<int> a{1, 2, 3, 4, 5};
    std::vector<int> b;
    rg::transform(a, std::back_inserter(b), [](int x)
                  { return x * x; });
    for (auto i : b)
    {
        std::cout << i << ' ';
    }
    std::cout <<  std::endl;
    for (auto i : a | std::views::transform([](int x){ return x * x; }))
    {
        std::cout << i << ' ';
    }
    std::cout << std::endl;
    for (auto i : a
        | std::views::filter([](int x) { return x > 0; })
        | std::views::take(5)
        | std::views::transform([](int x) { return std::sqrt(x); })) {
        std::cout << i << ' ';
    }
    return 0;
}